#include "stdio.h"
#include "thirdparty/cjson/cJSON.h"
#include "stdlib.h"
#include "string.h"

#define LOG_RUN_LEVEL  LOG_LEVEL_INFO
#define LOG_MODULE      "did"
#include "thirdparty/log/log.h"

void json_data_deal(char *in_json,char *out_str)
{
	cJSON *Temp = NULL,*root = NULL;

	char *did_name = NULL;
	char *signkey_name = NULL;
	char *lslat_name = NULL;
	char *scode_name = NULL;

	/*首先调用cJSON_Parse()
	函数，解析JSON数据包，并按照cJSON结构体的结构序列化整个数据包。
	使用该函数会通过malloc()
	函数在内存中开辟一个空间，使用完成需要手动释放。*/
	root = cJSON_Parse(in_json);
	if(!root){
		LOG_E("parse json err");
		return;
	}

	do{
	 /* 调用cJSON_GetObjectItem()
函数，可从cJSON结构体中查找某个子节点名称（键名称），
	 如果查找成功可把该子节点序列化到cJSON结构体中  */
	Temp = cJSON_GetObjectItem(root,"PRODUCT_KEY");
	if(!Temp){
		LOG_E("not find the 'PRODUCT_KEY' obj");
		break;
	}
	did_name = Temp->valuestring;
	 
	Temp = cJSON_GetObjectItem(root,"DEVICE_NAME");
	if(!Temp){
		LOG_E("not find the 'PRODUCT_KEY' obj");
		break;
	}
	signkey_name = Temp->valuestring;

	Temp =  cJSON_GetObjectItem(root,"DEVICE_SECRET");
	if(!Temp){
		LOG_E("not find the 'PRODUCT_KEY' obj");
		break;
	}
	lslat_name = Temp->valuestring;

	Temp = cJSON_GetObjectItem(root,"PRODUCT_SECRET");
	if(!Temp){
		LOG_E("not find the 'PRODUCT_KEY' obj");
		break;
	}
	scode_name = Temp->valuestring;

	/*
	如果需要使用cJSON结构体中的内容，可通过cJSON结构体中的val
	ueint和valuestring取出有价值的内容（即键的值）
	本例子中，我们直接访问 item->valuestring 就获取到 "Brett
	" 的内容了。      */

    sprintf(out_str,"[iot]\n"
            "did = %s\n"
            "signkey = %s==\n"
            "lslat = %s==\n"
            "scode = %s\n"
            "gdomain = prod.glbs.xcthings.com\n"
            "gipaddr = 47.240.1.244,47.252.5.225,8.209.77.49,39.108.59.60\n",
			did_name,
			signkey_name,
			lslat_name,
			scode_name);

	}while(0);
	  	
	/*通过cJSON_Delete()，释放cJSON_Parse()分配出来的内存空间*/
	cJSON_Delete(root);

    LOG_I("sprintf_out = %s\n",out_str);
}
